/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.cardapiodigital.data;

import br.com.cardapiodigital.database.ConnectionManager;
import br.com.cardapiodigital.entity.Cidades;
import br.com.cardapiodigital.entity.Estados;
import br.com.cardapiodigital.exception.CardapioDigitalException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author egberto
 */
public class CidadesData extends GenericData<Cidades> {
    
    

    @Override
    public void salvar(Cidades entity) throws CardapioDigitalException {
        PreparedStatement pstmt = null;
        Connection conn = null;
        
        String sql = "INSERT INTO cidades (nome,estados_uf) values (?,?)";    
        
        try{
            conn = ConnectionManager.getConexao(); 
            pstmt = conn.prepareStatement(sql);
            // preenche os valores ?,?
            pstmt.setString(1, entity.getNome());
            pstmt.setString(2, entity.getEstadosUf().getUf());           
            
            pstmt.execute();
            
        }catch(SQLException ex){
            Logger.getLogger(CidadesData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query" + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn, pstmt);
        }
    }

    @Override
    public void atualizar(Cidades entity) throws CardapioDigitalException {
        PreparedStatement pstmt = null;
        Connection conn = null;
        
        String sql = "UPDATE cidades SET nome = ?,estados_uf = ? WHERE id = ?";    
        
        try{
            conn = ConnectionManager.getConexao(); 
            pstmt = conn.prepareStatement(sql);
            // preenche os valores ?,?
            pstmt.setString(1, entity.getNome());
            pstmt.setString(2, entity.getEstadosUf().getUf());
            pstmt.setInt(3, entity.getId());                       
            
            pstmt.execute();
            
        }catch(SQLException ex){
            Logger.getLogger(CidadesData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query" + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn, pstmt);
        }
    }

    @Override
    public void excluir(int entityId) throws CardapioDigitalException {
        PreparedStatement pstmt = null;
        Connection conn = null;
        
        String sql = "DELETE FROM cidades WHERE id=?";    
        
        try{
            conn = ConnectionManager.getConexao(); 
            pstmt = conn.prepareStatement(sql);
            // preenche os valores ?,?
            pstmt.setInt(1, entityId);           
            
            pstmt.execute();
            
        }catch(SQLException ex){
            Logger.getLogger(CidadesData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query" + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn, pstmt);
        }
    }

    @Override
    public List<Cidades> buscarTodos() throws CardapioDigitalException {
        String sql = "select * from v_cidades order by Cidade asc";
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List<Cidades> listaCidades = new ArrayList<Cidades>();
        
        try{
            conn = ConnectionManager.getConexao();
            stmt =  conn.createStatement();
            rs = stmt.executeQuery(sql);
            
            while(rs.next()){
                int id = rs.getInt("Id");
                String nome = rs.getString("Cidade");
                String uf = rs.getString("UF");
                String nomeUf = rs.getString("Nome_Estado");
                listaCidades.add(new Cidades(id,nome,new Estados(uf,nomeUf)));                
            }
            
            return  listaCidades;
        
        }catch(SQLException ex){
            Logger.getLogger(CidadesData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query" + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn,stmt,rs);
        }
    }

    
    @Override
    public Cidades obtem(int entityId) throws CardapioDigitalException {
        String sql = "SELECT * FROM v_cidades WHERE id='" + entityId + "'";    

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        Cidades cidade = null;
        
        try{
            conn = ConnectionManager.getConexao();
            stmt =  conn.createStatement();  
            rs = stmt.executeQuery(sql);
            
            while(rs.next()){
                int id = rs.getInt("Id");
                String nome = rs.getString("Cidade");
                String uf = rs.getString("UF");
                String nomeUf = rs.getString("Nome_Estado");
                cidade = new Cidades(id,nome,new Estados(uf,nomeUf));
            }
            
            return cidade;
        
        }catch(SQLException ex){
            Logger.getLogger(CidadesData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query " + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn,stmt,rs);
        }
    }   
    
    public List<Cidades> buscarPorEstado(String estado) throws CardapioDigitalException {
        String sql = "select * from v_cidades Where UF ='" + estado + "' order by Cidade asc" ;
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List<Cidades> listaCidades = new ArrayList<Cidades>();
        
        try{
            conn = ConnectionManager.getConexao();
            stmt =  conn.createStatement();
            rs = stmt.executeQuery(sql);
            
            while(rs.next()){
                int id = rs.getInt("Id");
                String nome = rs.getString("Cidade");
                String uf = rs.getString("UF");
                String nomeUf = rs.getString("Nome_Estado");
                listaCidades.add(new Cidades(id,nome,new Estados(uf,nomeUf)));                
            }
            
            return  listaCidades;
        
        }catch(SQLException ex){
            Logger.getLogger(CidadesData.class.getName()).
                    log(Level.SEVERE, null, ex);
            String errorMsg = "Erro na execucao da query" + sql;
            throw new CardapioDigitalException(errorMsg, ex);
        }finally{
            ConnectionManager.close(conn,stmt,rs);
        }
    }
    
}
